#coding=utf-8
__author__ = 'Meteor'
from pymysql.err import ProgrammingError
'''
安装pymysql
pip3 install pymysql -i https://pypi.douban.com/simple

使用流程：
1、创建数据库连接。需要用户名、密码、数据库名
connect(user='root',password='1234',database='scm',charset='utf8')
2、获取游标对象（使用游标对象操作数据库）
conn.cursor()
3、执行sql语句
execute("select * from scmuser;")
4、返回sql执行结果
cursor.fetchall()
5、关闭游标
6、关闭连接

返回数据方法：
1、返回sql执行的所有结果
fetchall()
2、返回n条结果，n为数字
fetchmany(n)
3、每次返回一条结果
fetchont()
'''
import pymysql
import setings

class Mysql:
    def __init__(self):
        # 默认初始化连接mysql数据库
        self.conn = pymysql.connect(**setings.DATABASE)

        self.cursor = self.conn.cursor()

    def __reconnect(self):
        '''
            当执行测试过程中，发现连接关闭了，则重新建立数据库连接
        :return: 
        '''
        self.conn = pymysql.connect(**setings.DATABASE)
        self.cursor = self.conn.cursor()

    def __execute(self,sql):
        '''
        执行单条sql语句
        :param sql: sql语句
        :return: 
        '''
        try:
            self.cursor.execute(sql)
        except ProgrammingError:
            # 如果发生连接已关闭的异常，则重新连接
            self.__reconnect()
        #


    def executes(self,sqls):
        '''
        批量执行sql语句，多条语句之间逗号隔开
        :param sqls: 
        :return: 
        '''
        for i in  sqls:
            # print(i)
            self.__execute(i)
        # 执行结束后，自动提交
        self.conn.commit()

    def fetachall(self):
        '''
        返回sql语句中所有的执行结果，以元组形式返回
        :return: 
        '''
        return self.cursor.fetchall()

    def fetchmany(self,n):
        '''
        返回前n条结果
        :param n: 
        :return: 
        '''
        return self.cursor.fetchmany(n)

    def close(self):
        '''
        关闭连接和游标对象
        :return: 
        '''
        self.cursor.close()
        self.conn.close()



mysql = Mysql()


class suqi(Mysql):
    def __init__(self):
        pass



# conn  = pymysql.connect(**setings.DATABASE)

# modle_sql = [
#     "delete from usermodel where account='meteor190';",
#     "delete from  scmuser where account='meteor190';"
# ]
#
# mysql.executes(modle_sql)
# mysql.close()
'''

# 创建一个mysql的连接
conn  = pymysql.connect(user='root',password='1234',database='scm',charset='utf8')
# 获取游标对象（不可以直接操作数据库，需要通过游标对象操作）
cursor = conn.cursor()

#执行mysql sql语句
cursor.execute("select * from scmuser;")

# 获取sql语句的执行结果
# print(cursor.fetchall())
# print(cursor.fetchmany(3))
# 每次返回一条结果
print(cursor.fetchone())

# 关闭游标
cursor.close()

# 关闭连接
conn.close()
'''